package com.design.util;

import com.design.constant.Constants;
import com.design.domain.form.LoginUser;
import com.design.domain.vo.SysUser;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;


/**
 * 安全服务工具类
 *
 * @author ruoyi
 */
public class SecurityUtils {
	/**
	 * 获取用户账户
	 **/
	public static String getUsername() {
		try {
			LoginUser loginUser = getLoginUser();
			SysUser sysUser = loginUser.getSysUser();
			return sysUser.getUserName();
		} catch (Exception e) {
			throw new RuntimeException("获取用户账户异常");
		}
	}

	/**
	 * 获取用户
	 **/
	public static LoginUser getLoginUser() {
		try {
			return (LoginUser) getAuthentication().getPrincipal();
		} catch (Exception e) {
			throw new RuntimeException("获取用户信息异常");
		}
	}

	/**
	 * 获取Authentication
	 */
	public static Authentication getAuthentication() {
		return SecurityContextHolder.getContext().getAuthentication();
	}

	/**
	 * 生成BCryptPasswordEncoder密码
	 *
	 * @param password 密码
	 * @return 加密字符串
	 */
	public static String encryptPassword(String password) {
		//BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
		return Md5Util.hash(password);
	}

	/**
	 * 判断密码是否相同
	 *
	 * @param rawPassword     真实密码
	 * @param encodedPassword 加密后字符
	 * @return 结果
	 */
	public static boolean matchesPassword(String rawPassword, String encodedPassword) {
		//BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
		return encodedPassword.equals(Md5Util.hash((String) rawPassword));
	}

	/**
	 * 是否为管理员
	 *
	 * @param userId 用户ID
	 * @return 结果
	 */
	public static boolean isAdmin(Long userId) {
		return userId != null && 1L == userId;
	}
}
